#include <stdio.h>
#include <mntent.h>
#include <sys/statfs.h>
#include "getsysinfo.h"

//struct statfs
//{
//    long    f_type;     /* 文件系统类型  */
//    long    f_bsize;    /* 经过优化的传输块大小  */
//    long    f_blocks;   /* 文件系统数据块总数 */
//    long    f_bfree;    /* 可用块数 */
//    long    f_bavail;   /* 非超级用户可获取的块数 */
//    long    f_files;    /* 文件结点总数 */
//    long    f_ffree;    /* 可用文件结点数 */
//    fsid_t  f_fsid;     /* 文件系统标识 */
//    long    f_namelen;  /* 文件名的最大长度 */
//};

double fs_rate(void) {
    double fs_rate = 0;
    struct mntent *mount_entry;
    struct statfs fs;

    long long total_size = 0;
    long long avail_size = 0;
    long long used = 0;
    long long avail = 0;

    FILE *f;
    f = setmntent("/etc/mtab", "r");
    while ((mount_entry = getmntent(f))) {
        getstatfs(mount_entry->mnt_dir, &fs);
        used += (fs.f_blocks - fs.f_bfree);
        avail += fs.f_bavail;
    }
    fs_rate = (double) used / (double) (used + avail);
    endmntent(f);
    return fs_rate * 100;

}


int getstatfs(char *path, struct statfs *fs) {

    if (statfs(path, fs) != 0)
        return -1;

    if ((fs->f_bfree == 0) || (fs->f_ffree == 0))
        return -1;

    return 0;
}

